#include <iostream>
#include <future>
using namespace std;
int main()
{
    // std::future 是一个模板类，用于获取异步任务的结果。它提供了一种线程安全的机制，让你可以在将来的某个时刻获取另一个线程中计算的结果
    // 1、get()	阻塞等待任务完成，并返回结果（只能调用一次）
    // 2、wait()	阻塞等待任务完成，但不获取结果
    // 3、wait_for()	等待指定时间，检查任务是否完成
    //      std::future::wait_for 的返回值是一个枚举 std::future_status，它告诉你异步任务在指定超时时间内是否完成。三种可能结果
    //          1、 std::future_status::ready	任务已完成，可以调用 get() 取结果。
    //          2、std::future_status::timeout	超时时间用完，任务仍未完成。
    //          3、std::future_status::deferred	任务被 std::launch::deferred 延迟，尚未开始执行。
    // 4、valid()	检查 future 是否有效（是否关联了共享状态）
    auto fut = std::async([]()
                          {
        cout << "Async task running..." << endl;
        std::this_thread::sleep_for(std::chrono::seconds(2));
        cout << "Async task finished." << endl;
        return 42; });
    // get()	阻塞等待任务完成，并返回结果（只能调用一次）
    int result = fut.get();
    cout << fut.valid() << endl;
    std::cout << "Result: " << result << std::endl;
    return 0;
}